cd ${test_tmpdir}
}
+skip() {
+ echo "1..0 # SKIP" "$@"
+ exit 0
+}
+
skip_without_user_xattrs () {
touch test-xattrs
- if ! setfattr -n user.testvalue -v somevalue test-xattrs; then
- echo "1..0 # SKIP this test requires xattr support"
- exit 0
- fi
+ setfattr -n user.testvalue -v somevalue test-xattrs || \
+ skip "this test requires xattr support"
}
skip_without_fuse () {
- if ! fusermount --version >/dev/null 2>&1; then
- echo "1..0 # SKIP no fusermount"
- exit 0
- fi
+ fusermount --version >/dev/null 2>&1 || skip "no fusermount"
- if ! capsh --print | grep -q 'Bounding set.*[^a-z]cap_sys_admin'; then
- echo "1..0 # SKIP No cap_sys_admin in bounding set, can't use FUSE"
- exit 0
- fi
-
- if ! [ -w /dev/fuse ]; then
- echo "1..0 # SKIP no write access to /dev/fuse"
- exit 0
- fi
+ capsh --print | grep -q 'Bounding set.*[^a-z]cap_sys_admin' || \
+ skip "No cap_sys_admin in bounding set, can't use FUSE"
- if ! [ -e /etc/mtab ]; then
- echo "1..0 # SKIP no /etc/mtab"
- exit 0
- fi
+ [ -w /dev/fuse ] || skip "no write access to /dev/fuse"
+ [ -e /etc/mtab ] || skip "no /etc/mtab"
}
libtest_cleanup_gpg () {
--- /dev/null
+#!/bin/bash -ex
+
+this_script="${BASH_SOURCE:-$(readlink -f "$0")}"
+
+setup_bootfs() {
+ mkdir -p "$1/proc" "$1/bin"
+ echo "quiet ostree=/ostree/boot.0 ro" >"$1/proc/cmdline"
+ touch "$1/this_is_bootfs"
+ cp "$(dirname "$this_script")/../src/switchroot/ostree-prepare-root" "$1/bin"
+}
+
+setup_rootfs() {
+ mkdir -p "$1/ostree/deploy/linux/deploy/1334/sysroot" \
+ "$1/ostree/deploy/linux/deploy/1334/var" \
+ "$1/ostree/deploy/linux/deploy/1334/usr" \
+ "$1/ostree/deploy/linux/var" \
+ "$1/bin"
+ ln -s "deploy/linux/deploy/1334" "$1/ostree/boot.0"
+ ln -s . "$1/sysroot"
+ touch "$1/ostree/deploy/linux/deploy/1334/this_is_ostree_root" \
+ "$1/ostree/deploy/linux/var/this_is_ostree_var" \
+ "$1/ostree/deploy/linux/deploy/1334/usr/this_is_ostree_usr" \
+ "$1/this_is_real_root"
+ cp /bin/busybox "$1/bin"
+ busybox --list | xargs -n1 -I '{}' ln -s busybox "$1/bin/{}"
+ cp -r "$1/bin" "$1/ostree/deploy/linux/deploy/1334/"
+}
+
+enter_fs() {
+ cd "$1"
+ mkdir testroot
+ pivot_root . testroot
+ export PATH=$PATH:/sysroot/bin
+ cd /
+ umount -l testroot
+ rmdir testroot
+}
+
+find_in_env() {
+ tmpdir="$(mktemp -dt ostree-test-switchroot.XXXXXX)"
+ unshare -m <<-EOF
+ set -e
+ . "$this_script"
+ "$1" "$tmpdir"
+ enter_fs "$tmpdir"
+ ostree-prepare-root /sysroot
+ find /
+ touch /usr/usr_writable 2>/null \
+ && echo "/usr is writable" \
+ || echo "/usr is not writable"
+ touch /sysroot/usr/sysroot_usr_writable 2>/null \
+ && echo "/sysroot/usr is writable" \
+ || echo "/sysroot/usr is not writable"
+ EOF
+ rm -rf "$tmpdir"
+}
+
+setup_initrd_env() {
+ mount -t tmpfs tmpfs "$1"
+ setup_bootfs "$1"
+ mkdir "$1/sysroot"
+ mount -t tmpfs tmpfs "$1/sysroot"
+ setup_rootfs "$1/sysroot"
+}
+
+test_that_prepare_root_sets_sysroot_up_correctly_with_initrd() {
+ find_in_env setup_initrd_env >files
+
+ grep -qx "/this_is_bootfs" files
+ grep -qx "/sysroot/this_is_ostree_root" files
+ grep -qx "/sysroot/sysroot/this_is_real_root" files
+ grep -qx "/sysroot/var/this_is_ostree_var" files
+ grep -qx "/sysroot/usr/this_is_ostree_usr" files
+
+ grep -qx "/sysroot/usr is not writable" files
+ echo "ok ostree-prepare-root sets sysroot up correctly with initrd"
+}
+
+# This script sources itself so we only want to run tests if we're the parent:
+if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
+ . $(dirname $0)/libtest.sh
+ unshare -m true || \
+ skip "this test needs to set up mount namespaces, rerun as root"
+
+ echo "1..1"
+ test_that_prepare_root_sets_sysroot_up_correctly_with_initrd
+fi